package com.example.ApiController;

import cn.hutool.crypto.SecureUtil;
import com.example.common.Result;
import com.example.entity.*;
import com.example.service.*;
import com.example.utils.ExcelUtil;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;



import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

@RestController
public class ExcelController {


    @Autowired
    private ZyzStudentService zyzStudentService;
    @Autowired
    private CollegeService collegeService;



    @PostMapping("/api/upload-excel")
    public Result uploadExcel(@RequestParam("file") MultipartFile file) throws IOException {
        try {
            List<List<String>> cellValue = ExcelUtil.getCellValue(file);
            for (int i = 1; i < cellValue.size(); i++) {
                List<String> strings = cellValue.get(i);
                //
                ZyzStudent zyzStudent = new ZyzStudent();
                if (strings.size() == 6) {
                    String s1 = strings.get(0);
                    //学号
                    zyzStudent.setIdCord((int) Float.parseFloat(s1));
                    String s2 = strings.get(1);
                    //用户名
                    zyzStudent.setUsername(s2);
                    String s3 = strings.get(2);
                    //密码
                    String md5 = SecureUtil.md5(s3);
                    zyzStudent.setPassword(md5);

                    String s4 = strings.get(3);
                    //学生姓名
                    zyzStudent.setName(s4);

                    String s5 = strings.get(4);
                    //根据学院名称去查询学院id
                    College college = collegeService.selectByName(s5);
                    zyzStudent.setCollegeId(college.getId());
                    String s = strings.get(5);
                    //年级
                    int i1 = (int) Float.parseFloat(s);

                    zyzStudent.setYear(String.valueOf(i1));
                    zyzStudent.setAvatar("http://localhost:9090/files/1745342165882-QQ图片20220311111731.jpg");

                    zyzStudentService.add(zyzStudent);
                    System.out.println("第"+i+"行数据插入成功===========");
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            return Result.error("500","服务器开小差了");
        }
        return Result.success();
    }

    // 定义一个 POST 请求的接口，路径为 /upload-excel
    /*@PostMapping("/api/upload-excel")
    // 该方法接收一个名为 file 的 MultipartFile 类型的参数，代表上传的 Excel 文件
    public List<List<String>> uploadExcel2(@RequestParam("file") MultipartFile file) throws IOException {
        // 用于存储最终解析得到的 Excel 数据，是一个二维列表
        List<List<String>> result = new ArrayList<>();
        // 检查上传的文件是否为空
        if (!file.isEmpty()) {
            try (
                    // 从 MultipartFile 中获取输入流，用于读取文件内容
                    InputStream inputStream = file.getInputStream()
            ) {
                // 创建一个 XSSFWorkbook 对象，用于处理 .xlsx 格式的 Excel 文件
                Workbook workbook = new XSSFWorkbook(inputStream);
                // 获取工作簿中的第一个工作表
                Sheet sheet = workbook.getSheetAt(0);
                // 遍历工作表中的每一行
                for (Row row : sheet) {
                    // 用于存储当前行的数据
                    List<String> rowData = new ArrayList<>();
                    // 遍历当前行中的每一个单元格
                    for (Cell cell : row) {
                        // 获取当前单元格的类型
                        CellType cellType = cell.getCellType();
                        // 根据单元格的类型进行不同的处理
                        switch (cellType) {
                            // 如果单元格类型是字符串
                            case STRING:
                                // 将单元格中的字符串值添加到当前行的数据列表中
                                rowData.add(cell.getStringCellValue());
                                break;
                            // 如果单元格类型是数字
                            case NUMERIC:
                                // 检查单元格是否是日期格式
                                if (DateUtil.isCellDateFormatted(cell)) {
                                    // 如果是日期格式，将日期转换为字符串并添加到当前行的数据列表中
                                    rowData.add(cell.getDateCellValue().toString());
                                } else {
                                    // 如果不是日期格式，将数字转换为字符串并添加到当前行的数据列表中
                                    rowData.add(String.valueOf(cell.getNumericCellValue()));
                                }
                                break;
                            // 如果单元格类型是布尔值
                            case BOOLEAN:
                                // 将布尔值转换为字符串并添加到当前行的数据列表中
                                rowData.add(String.valueOf(cell.getBooleanCellValue()));
                                break;
                            // 如果单元格类型是公式
                            case FORMULA:
                                // 将公式添加到当前行的数据列表中
                                rowData.add(cell.getCellFormula());
                                break;
                            // 其他类型
                            default:
                                // 添加空字符串到当前行的数据列表中
                                rowData.add("");
                        }
                    }
                    // 将当前行的数据添加到最终结果列表中
                    result.add(rowData);
                }
                // 关闭工作簿，释放资源
                workbook.close();
            }
        }
        // 返回解析得到的 Excel 数据
        return result;
    }*/
}    